// #include <iostream>
// #include <cstdio>
// using namespace std;

// void test_jump(int i, double d) {
//     cout << "enter test_jump(int, double)" << endl;
//     printf("enter test_jump(int, double)\n");
// }

// int test_test() {
//     // cout << "enter test_test()" << endl;
//     printf("enter test_test()\n");
//     return 0;
// }

// void test_record() {
//     int i = 10;
//     char c = 'a';
//     double d = 20.2;
//     printf("这里是%d行\n", __LINE__);
//     i++;
//     d--;
//     c += 1;
//     double dd = 3 * 2.1222;
// }

// int main() {
//     int i = 0;
//     double d = 10.0;
//     d = 20.0;
//     i = 200;
// label:
//     test_test();
//     test_record();
//     return 0;
// }

// #include <iostream>
// using namespace std;

// double test() {
//     int i = 10;
//     double d = 20.5;
//     return i + d;
// }

// int accumulate(int begin, int end) {
//     static int i = 0;
//     cout << "accumulate(int, int) 已被调用 " << ++i << "次" << endl;
//     if (begin > end) swap(begin, end);
//     return ((begin + end) * (end - begin + 1) >> 1);
// }

// int main() {
//     int i = 20;
//     double d = 30.0;

//     (void)i;
//     (void)d;

//     test();
//     accumulate(100,1000);
//     // cout << "test" << endl;
//     return 0;
// }

#include <iostream>
#include <unistd.h>
#include <cassert>
#include <wait.h>
using namespace std;


int main() {
    int data = 100;
    pid_t pid = fork();
    if (pid < 0) perror("create child process fail\n");

    if (0 == pid) {
        // child process
        data = 200;
        cout << "我的数据为: " << data << endl;
        cout << "我的pid为: " << getpid() << " 我的父进程的pid为: " << getppid() << endl;
        return 0;
    }
    else if (pid > 0) {
        // parent process
        cout << "父进程运行中......" << endl;
        pid_t ret = wait(nullptr);
        if (ret == pid) cout << "成功等待到子进程: " << ret << endl;

        // while (true);
    }
    else {
        // 未知错误
        cerr << __FILE__ << " 文件 " << __LINE__ << "行发生未知错误" << endl;
        assert(false);
    }
    return 0;
}